lib_target(&mut ret, lib);
}
bin_targets(&mut ret, bins,
- &mut |bin| inferred_bin_path(bin, package_root, bins.len()));
+ &mut |bin| inferred_bin_path(bin, lib.is_some(), package_root, bins.len()));
if let Some(custom_build) = custom_build {
}
fn inferred_bin_path(bin: &TomlBinTarget,
+ has_lib: bool,
package_root: &Path,
bin_len: usize) -> PathBuf {
// here we have a single bin, so it may be located in src/main.rs, src/foo.rs,
return path.to_path_buf()
}
- let path = Path::new("src").join(&format!("{}.rs", bin.name()));
- if package_root.join(&path).exists() {
- return path.to_path_buf()
+ if !has_lib {
+ let path = Path::new("src").join(&format!("{}.rs", bin.name()));
+ if package_root.join(&path).exists() {
+ return path.to_path_buf()
+ }
}
let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name()));
return path.to_path_buf()
}
- let path = Path::new("src").join(&format!("{}.rs", bin.name()));
- if package_root.join(&path).exists() {
- return path.to_path_buf()
+ if !has_lib {
+ let path = Path::new("src").join(&format!("{}.rs", bin.name()));
+ if package_root.join(&path).exists() {
+ return path.to_path_buf()
+ }
}
let path = Path::new("src").join("bin").join(&format!("main.rs"));
assert_that(p.cargo_process("build"), execs().with_status(0));
}
+
+#[test]
+fn no_bin_in_src_with_lib() {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.1.0"
+ authors = []
+
+ [[bin]]
+ name = "foo"
+ "#)
+ .file("src/lib.rs", "")
+ .file("src/foo.rs", "fn main() {}");
+
+ assert_that(p.cargo_process("build"),
+ execs().with_status(101)
+ .with_stderr_contains(r#"[ERROR] couldn't read "src[/]bin[/]main.rs"[..]"#));
+}